﻿namespace Communergy.Silverlight.Client
{
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using Communergy.Silverlight.Client.LoginUI;
    using System.Windows.Ria.ApplicationServices;

    public partial class MainPage : UserControl
    {
        private readonly AuthenticationService authService = WebContext.Current.Authentication;

        public MainPage()
        {
            InitializeComponent();
            this.loginContainer.Child = new LoginStatus();

            authService.LoggedIn += new System.EventHandler<AuthenticationEventArgs>(Authentication_LoggedIn);
            authService.LoggedOut += new System.EventHandler<AuthenticationEventArgs>(Authentication_LoggedOut);
            
            this.UpdateLoginState();
        }

        private void Authentication_LoggedIn(object sender, AuthenticationEventArgs e)
        {
            this.UpdateLoginState();
        }

        private void Authentication_LoggedOut(object sender, AuthenticationEventArgs e)
        {
            this.UpdateLoginState();
        }

        /// <summary>
        ///     After the Frame navigates, ensure the <see cref="HyperlinkButton"/> representing the current page is selected
        /// </summary>
        private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
        {
            foreach (UIElement child in LinksStackPanel.Children)
            {
                HyperlinkButton hb = child as HyperlinkButton;
                if (hb != null && hb.NavigateUri != null)
                {
                    if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))
                    {
                        VisualStateManager.GoToState(hb, "ActiveLink", true);
                    }
                    else
                    {
                        VisualStateManager.GoToState(hb, "InactiveLink", true);
                    }
                }
            }

            foreach (UIElement child in UserMenu.Children)
            {
                HyperlinkButton hb = child as HyperlinkButton;
                if (hb != null && hb.NavigateUri != null)
                {
                    if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))
                    {
                        VisualStateManager.GoToState(hb, "ActiveLink", true);
                    }
                    else
                    {
                        VisualStateManager.GoToState(hb, "InactiveLink", true);
                    }
                }
            }
        }

        /// <summary>
        ///     If an error occurs during navigation, show an error window
        /// </summary>
        private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            e.Handled = true;
            ErrorWindow.CreateNew(e.Exception);
        }

        private void UpdateLoginState()
        {
            if (WebContext.Current.User.IsAuthenticated)
            {
                this.UserMenu.Visibility = Visibility.Visible;
            }
            else
            {
                this.UserMenu.Visibility = Visibility.Collapsed;
            }
        }
    }
}